﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Inventario_HardSoft.ADO;
using Inventario_HardSoft.Controlador;
using Inventario_HardSoft.Presentacion.Clases;
using Inventario_HardSoft.Presentacion.CalendarColumn;

namespace Inventario_HardSoft.Terceros
{
    public partial class Control_Proyecto : Form
    {
        private Ctrl_Proyecto controlador;

        private string idproy;

        public Control_Proyecto()
        {
            InitializeComponent();
            controlador = new Ctrl_Proyecto();

            idproy = string.Empty;
        }

        private void cmbProyecto_DropDown(object sender, EventArgs e)
        {
            this.limpiarformularioDatosProyecto();
            this.limpiarformularioAgregarActividad();
            this.grid_Actividades.Rows.Clear();

            //limpiamos el combo    
            cmbProyecto.Items.Clear();
            List<PROYECTO> reparadores = controlador.getList_Proyectos();
            foreach (PROYECTO r in reparadores) //recorre cada elemento de label1 lista
            {
                cmbProyecto.Items.Add(r.NOMBPROYECTO.ToString());
            } 
        }

        private void btnBuscarProyecto_Click(object sender, EventArgs e)
        {
            this.cargarProyecto(); 
        }

        private void cargarProyecto()
        {
            grid_Actividades.Rows.Clear();
            this.limpiarformularioDatosProyecto();

            if (cmbProyecto.SelectedIndex >= 0)
            {
                DataTable proyecto = controlador.getProyecto(cmbProyecto.SelectedItem.ToString());
                idproy = proyecto.Rows[0]["idproyecto"].ToString();
                btnFinalizarProy.Tag = idproy;

                if (proyecto.Rows.Count > 0)
	            {
		            //rellenamos el formulario
                    txt_nombreproyecto.Text = proyecto.Rows[0]["nombreproyecto"].ToString();
                    txt_tercero.Text = proyecto.Rows[0]["nombretercero"].ToString();
                    txt_objetivo.Text = proyecto.Rows[0]["objetivo"].ToString();
                    txt_fechainicio.Text = proyecto.Rows[0]["fechainicio"].ToString();
                    txt_fechatermino.Text = proyecto.Rows[0]["fechaestimadatermino"].ToString();
                    txt_costo.Text = proyecto.Rows[0]["costo"].ToString();
                    txt_estado.Text = proyecto.Rows[0]["estado"].ToString();

                    this.fill_GridActividad(proyecto.Rows[0]["idproyecto"].ToString());
	            }
            }
            else 
            {
                MessageBox.Show("Seleccione proyecto", "Camilo", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
            }

            grid_Actividades.ClearSelection();        
        }

        private void fill_GridActividad(string idproyecto)
        {
            List<ACTIVIDAD> listActividad = controlador.getListActividad(idproyecto);
            int i = 1;

            grid_Actividades.Rows.Clear();

            foreach (ACTIVIDAD a in listActividad)
            {
                object[] obj = new object[]
                        {
                            a.IDACTIVIDAD,
                            i.ToString(),
                            a.FECHADECONSULTA.GetValueOrDefault(DateTime.MinValue),
                            a.OBSERVACION,
                            a.FECHAESTIMADAACTIVIDAD.GetValueOrDefault(DateTime.MinValue)
                        };

                obj[2] = ((DateTime)obj[2]).Equals(DateTime.MinValue) ? String.Empty : ((DateTime)obj[2]).ToShortDateString();
                obj[4] = ((DateTime)obj[4]).Equals(DateTime.MinValue) ? String.Empty : ((DateTime)obj[4]).ToShortDateString();

                grid_Actividades.Rows.Add(obj);
                i++;
            }
        }

        private void limpiarformularioDatosProyecto()
        {
            txt_nombreproyecto.Text = string.Empty;
            txt_tercero.Text = string.Empty;
            txt_fechainicio.Text = string.Empty;
            txt_fechatermino.Text = string.Empty;
            txt_objetivo.Text = string.Empty;
            txt_costo.Text = string.Empty;
            txt_estado.Text = string.Empty;
        }

        private void limpiarformularioAgregarActividad()
        {
            txt_observacion.Text = string.Empty;
            time_fechaConsulta.ResetText();
            time_fechaRealTermino.ResetText();
        }

        private void cmbProyecto_Click(object sender, EventArgs e)
        {
            //grid_Proyect.Rows.Clear();
            //cmbProyecto.SelectedIndex = -1;
        }
 
        private void btnReg_Click(object sender, EventArgs e)
        {
            if (!string.IsNullOrWhiteSpace(txt_observacion.Text))
            {
                if (time_fechaConsulta.Value.Date.CompareTo(DateTime.Today) >= 0)
                {
                    if (time_fechaRealTermino.Value.Date.CompareTo(DateTime.Today) >= 0)
                    {
                        if (!controlador.contieneActividad(txt_observacion.Text, idproy))
                        {
                            if (MessageBox.Show("¿Confirma agregar actividad?", "Camilo", MessageBoxButtons.OKCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) == DialogResult.OK)
                            {
                                //agregar actividad
                                ACTIVIDAD a = new ACTIVIDAD()
                                {
                                    IDPROYECTO = idproy,
                                    FECHADECONSULTA = time_fechaConsulta.Value,
                                    FECHAESTIMADAACTIVIDAD = time_fechaRealTermino.Value,
                                    OBSERVACION = txt_observacion.Text,
                                    ESTADO = "ejecutandose",
                                    ELIMINADO = 0
                                };

                                bool estado = controlador.agregarActividad(a);

                                if (estado)
                                {
                                    MessageBox.Show("Actividad agregada", "Camilo", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1);
                                    this.fill_GridActividad(idproy);
                                }

                                this.limpiarformularioAgregarActividad();
                            }
                        }
                        else
                        {
                            MessageBox.Show("Existe una actividad con el mismo nombre", "Camilo", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
                            this.limpiarformularioAgregarActividad();
                        }
                    }
                    else
                    {
                        MessageBox.Show("La fecha de término no puede ser anterior a la fecha actual", "Camilo", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
                    }
                }
                else
                {
                    MessageBox.Show("La fecha de consulta no puede ser anterior a la fecha actual", "Camilo", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
                }
            }
            else
            {
                MessageBox.Show("No ha registrado ninguna observacion", "Camilo", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
            }            
        }

        private void btn_Cerrar_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void btn_Actualizar_Click(object sender, EventArgs e)
        {
            if (btn_Actualizar.Text == "Actualizar")
            {
                if (grid_Actividades.SelectedRows.Count > 0)
                {
                    DataGridViewRow rowSelected = grid_Actividades.SelectedRows[0];
                    rowSelected.DefaultCellStyle.BackColor = System.Drawing.Color.FromKnownColor(KnownColor.Info);
                    rowSelected.Cells["fechaConsulta"].ReadOnly = false;
                    rowSelected.Cells["actiObservacion"].ReadOnly = false;
                    rowSelected.Cells["fechadetermino"].ReadOnly = false;

                    btn_Actualizar.Text = "Terminar";
                    btn_Actualizar.Tag = rowSelected.Index; //le paso el indice de la fila a actualizar
                    btn_Eliminar.Enabled = false;
                    groupBox3.Enabled = false;
                }
            }
            else if (btn_Actualizar.Text == "Terminar")
            {
                int index = (int)btn_Actualizar.Tag;

                DataGridViewRow row = grid_Actividades.Rows[index];

                if (!string.IsNullOrWhiteSpace(row.Cells["actiObservacion"].Value.ToString()))
                {
                    if (MessageBox.Show("¿Confirma actualizar actividad?","Camilo",MessageBoxButtons.OKCancel,MessageBoxIcon.Question,MessageBoxDefaultButton.Button1) == DialogResult.OK)
	                {
		                ACTIVIDAD act = new ACTIVIDAD()
                        {
                            IDACTIVIDAD = row.Cells["idActividad"].Value.ToString(),
                            FECHADECONSULTA = Convert.ToDateTime(row.Cells["fechaConsulta"].Value),
                            FECHAESTIMADAACTIVIDAD = Convert.ToDateTime(row.Cells["fechadetermino"].Value),
                            OBSERVACION = row.Cells["actiObservacion"].Value.ToString(),
                        };

                        bool result = controlador.actualizaActividad(act);

                        if (result)
                        {
                            MessageBox.Show("Actividad actualizada", "Camilo", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1);                            
                        }
                        else
                        {
                            MessageBox.Show("Error al actualizar la actividad", "Camilo", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
                        }
	                }
                    this.fill_GridActividad(idproy);
                    this.setGrid_ReadOnly(grid_Actividades);
                }

                btn_Actualizar.Text = "Actualizar";
                btn_Actualizar.Tag = string.Empty;
                btn_Eliminar.Enabled = true;
                groupBox3.Enabled = true;
            }
        }

        private void setGrid_ReadOnly(DataGridView grid)
        {
            foreach(DataGridViewColumn column in grid.Columns)
            {
                column.ReadOnly = true;
            }
        }

        private void Control_Proyecto_Load(object sender, EventArgs e)
        {
            CalendarColumn colFechaConsulta = new CalendarColumn();
            CalendarColumn colFechaTermino = new CalendarColumn();

            colFechaConsulta.HeaderText = "F. de Consulta";
            colFechaConsulta.Name = "fechaConsulta";
            colFechaConsulta.ReadOnly = true;

            colFechaTermino.HeaderText = "F. de Término";
            colFechaTermino.Name = "fechadetermino";
            colFechaTermino.ReadOnly = true;

            grid_Actividades.Columns.Insert(2, colFechaConsulta);
            grid_Actividades.Columns.Insert(4, colFechaTermino);
        }

        private void btn_Eliminar_Click(object sender, EventArgs e)
        {
            if (grid_Actividades.SelectedRows.Count > 0)
            {
                if(MessageBox.Show("¿Confirma eliminar la actividad?","Camilo",MessageBoxButtons.OKCancel,MessageBoxIcon.Question,MessageBoxDefaultButton.Button1) == DialogResult.OK)
                {
                    string idactividad = grid_Actividades.SelectedRows[0].Cells["idActividad"].Value.ToString();
                    bool result = controlador.eliminarActividad(idactividad);

                    if (result)
                    {
                        MessageBox.Show("Actividad eliminada", "Camilo", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1);
                    }
                    else
                    {
                        MessageBox.Show("Error al eliminar actividad", "Camilo", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
                    }

                    this.fill_GridActividad(idproy);
                }
            }
        }

        private void btnFinalizarProy_Click(object sender, EventArgs e)
        {
            string idProy = btnFinalizarProy.Tag as string;

            DateTime min = DateTime.MinValue;
            string idActi = string.Empty;

            foreach (DataGridViewRow dgrow in grid_Actividades.Rows)
            {
                if (Convert.ToDateTime(dgrow.Cells["fechaConsulta"].Value).CompareTo(min) > 0)
                {
                    min = Convert.ToDateTime(dgrow.Cells["fechaConsulta"].Value);
                    idActi = dgrow.Cells["idActividad"].Value.ToString();
                }
            }

            bool result = controlador.finalizaProyecto(idproy, idActi);

            if (result)
            {
                MessageBox.Show("Proyecto finalizado", "Camilo", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1);
            }
            else
            {
                MessageBox.Show("Error al finalizar proyecto", "Camilo", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
            }

            grid_Actividades.Rows.Clear();
            this.limpiarformularioDatosProyecto();
            this.limpiarformularioAgregarActividad();
        }
    }
}
